package wrapper_;

/**
 * @author DCSGO
 * @version 1.0
 */
public class WrapperExercise {
    public static void main(String[] args) {
        Integer i1 = new Integer(127);
        Integer i2 = new Integer(127);
        System.out.println(i1 == i2);//false

        Integer i3 = new Integer(128);
        Integer i4 = new Integer(128);
        System.out.println(i3 == i4);//false

        Integer i5 = 127;
        Integer i6 = 127;
        System.out.println(i5 == i6);//true

        Integer i7 = 128;
        Integer i8 = 128;
        System.out.println(i7 == i8);//false

        Integer i9 = 127;
        Integer i10 = new Integer(127);
        System.out.println(i9 == i10);//false

        Integer i11 = 127;
        int i12 = 127;
        System.out.println(i11 == i12);//true
        //当比较对象中有基本数据类型时 比较的就是两个对象的值是否相等

        Integer i13 = 128;
        int i14 = 128;
        System.out.println(i13 == i14);//true

    }

    public static void main1(String[] args) {
        Integer a = new Integer(1);
        Integer b = new Integer(1);
        System.out.println(a == b);//false
        //比较 Integer 包装类的引用 只有当指向同一个对象时才为 true
        //这里是用的是 new 所以一定会是两个不同的对象 故为 false

        Integer m = 1;
        Integer n = 1;
        System.out.println(m == n);//true

        /* public static Integer valueOf(int i) {
        //                            -128                     127
                if (i >= IntegerCache.low && i <= IntegerCache.high)
                    return IntegerCache.cache[i + (-IntegerCache.low)];
                return new Integer(i);
            }*/
        //底层调用如上代码 显然 1在 [-128 127] 区间内 直接返回IntegerCache已有的对象
        //此时m 和 n 是同一个对象的引用故 为true

        Integer x = 128;
        Integer y = 128;
        System.out.println(x == y);//false

        //同上 128 不在 [-128 127] 区间内 return new Integer(i)
        //结果同 a == b 一样x y 是两个不同对象的引用 故false
    }
}
